package view.commonview;

import java.awt.BorderLayout;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import controller.commoncontroller.ClearInfoAreaListener;
import controller.commoncontroller.SaveInfoAreaListener;

import model.editormodel.EditorModel;
import view.UtilityConstants;

/**
 * <b>Erbt:</b> <code>JPanel</code> <br>
 * <b>In Verbindung stehende Klassen:</b> <code>InfoArea, Logo</code><br>
 * <b>Funktion:</b> Repraesentation des Infobereichs und Logos<br>
 * <br>
 * Panel, auf dem der Infobereich liegt und das Programmlogo dargestellt wird.
 * 
 * @author Team Locsi
 * 
 */
@SuppressWarnings("serial")
public class InfoPanel extends JPanel {

	private InfoArea infoArea;
	private JScrollPane scroller;
	private JPanel logo;

	/**
	 * Dieser Konstruktor erzeugt ein neues <code>InfoPanel</code>-Objekt, wobei
	 * ein <code>InfoArea</code>-Objekt und ein
	 * <code>Logo<code>-Objekt erzeugt und auf das <code>InfoPanel</code>-Objekt
	 * hinzugefuegt werden.
	 * 
	 * @param model
	 *            <code>EditorModel</code> - Referenz auf das
	 *            <code>EditorModel</code>
	 */
	public InfoPanel(EditorModel eModel) {
		this.infoArea = new InfoArea(eModel);
		this.logo = new Logo();
		this.scroller = new JScrollPane(infoArea);
		this.setLayout(new BorderLayout());
		Box box = Box.createHorizontalBox();
		box.add(scroller);
		JPanel subPanel = new JPanel(new GridLayout(4, 1));
		JPanel flowPanel1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
		JPanel flowPanel2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
		JButton resetInfo = new JButton(new ImageIcon(getClass().getClassLoader().getResource(
				UtilityConstants.ICON_PATH + "delete_info.png")));
		resetInfo.setToolTipText("Infobereich zurücksetzen");
		resetInfo.setMargin(new Insets(0, 0, 0, 0));
		resetInfo.setOpaque(false);
		resetInfo.setContentAreaFilled(false);
		resetInfo.addActionListener(new ClearInfoAreaListener(infoArea));
		JButton infosave = new JButton(new ImageIcon(getClass().getClassLoader().getResource(UtilityConstants.ICON_PATH
				+ "infoarea_save.png")));
		infosave.setToolTipText("Protokoll abspeichern");
		infosave.setMargin(new Insets(0, 0, 0, 0));
		infosave.setOpaque(false);
		infosave.setContentAreaFilled(false);
		infosave.addActionListener(new SaveInfoAreaListener(infoArea));
		flowPanel1.add(resetInfo);
		flowPanel2.add(infosave);
		subPanel.add(new JPanel());
		subPanel.add(flowPanel1);
		subPanel.add(flowPanel2);
		box.add(subPanel);
		box.add(Box.createHorizontalGlue());
		box.add(logo);
		this.setPreferredSize(new Dimension(200, 140));
		scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		this.add(box);
	}

	/**
	 * Diese Methode gibt die <code>InfoArea</code> zurueck.
	 * 
	 * @return die <code>InfoArea</code>
	 */
	public InfoArea getInfoArea() {
		return this.infoArea;
	}
}